package com.ruoyi.iot.enums;

import lombok.Getter;


/**
 * Modbus寄存器类型枚举类
 *
 * @author Howe
 * @since 2025/7/17
 */

@Getter
public enum ModbusRegisterTypeEnum {
    // 读功能码：1，写功能码：5
    COILS("coils", "01", "05"),
    // 读功能码：2，无写操作
    DISCRETE_INPUTS("discrete_inputs", "02", null),
    // 读功能码：3，写功能码：6
    HOLDING_REGISTERS("holding_registers", "03", "06"),
    // 读功能码：4，无写操作
    INPUT_REGISTERS("input_registers", "04", null);

    /**
     * 寄存器类型
     */
    private final String type;
    /**
     * 读功能码
     */
    private final String readCode;

    /**
     * 写功能码（可能为 null）
     */
    private final String writeCode;

    ModbusRegisterTypeEnum(String type, String readCode, String writeCode) {
        this.type = type;
        this.readCode = readCode;
        this.writeCode = writeCode;
    }

    /**
     * 根据 type 返回 readCode 的方法
     *
     * @Param: null
     * @Return:
     * @Author: Howe
     * @Date: 2025/3/13 上午10:48
     **/
    public static String getReadCodeByType(String type) {
        for (ModbusRegisterTypeEnum registerType : ModbusRegisterTypeEnum.values()) {
            if (type.equals(registerType.getType())) {
                return registerType.getReadCode();
            }
        }
        throw new IllegalArgumentException("Invalid type: " + type);
    }


    /**
     * 根据 type 返回 writeCode 的方法
     *
     * @Param: type
     * @Return:
     * @Author: Howe
     * @Date: 2025/3/13 上午10:48
     **/
    public static String getWriteCodeByType(String type) {
        for (ModbusRegisterTypeEnum registerType : ModbusRegisterTypeEnum.values()) {
            if (type.equals(registerType.getType())) {
                return registerType.getWriteCode();
            }
        }
        throw new IllegalArgumentException("Invalid type: " + type);
    }


}